package br.com.translog.fachada;

import br.com.translog.controlador.ControladorFuncionario;
import br.com.translog.controlador.ControladorSessao;
import br.com.translog.controlador.ControladorValidacao;
import br.com.translog.controlador.ControladorRastreamento;
import br.com.translog.controlador.ControladorCliente;
import br.com.translog.controlador.ControladorEntradaEntrega;
import br.com.translog.controlador.ControladorFornecedor;
//import br.com.translog.controlador.ControladorFornecimento;
import br.com.translog.controlador.ControladorProduto;
import br.com.translog.modelo.Bairro;
import br.com.translog.modelo.Cidade;
import br.com.translog.modelo.Cliente;
import br.com.translog.modelo.EntradaEntrega;
import br.com.translog.modelo.Estado;
import br.com.translog.modelo.Fornecedor;
//import br.com.translog.modelo.Fornecimento;
import br.com.translog.modelo.Funcionario;
import br.com.translog.modelo.GrupoAcesso;
import br.com.translog.modelo.Logradouro;
import br.com.translog.modelo.PessoaFisica;
import br.com.translog.modelo.PessoaJuridica;
import br.com.translog.modelo.Produto;
import br.com.translog.modelo.SaidaEntrega;
import br.com.translog.modelo.VolumeEntrega;

public class FachadaTranslog {
    
    private static FachadaTranslog instFachadaTranslog;

    private FachadaTranslog() {}

    public static FachadaTranslog getInstFachadaTranslog() {

        if (instFachadaTranslog == null) {
            return new FachadaTranslog();
        }

        return instFachadaTranslog;
    }

    //Chamada para Cliente...
    public void cadastraCliente(Cliente c, PessoaJuridica pj, Logradouro l) {
        
        ControladorCliente.getInstCliente().cadastraCliente(c, pj, l);
       
    }

    public void alteraCliente(Cliente c, PessoaJuridica pj, Logradouro l) {
        
        ControladorCliente.getInstCliente().alteraCliente(c, pj, l);
    }

    public void excluiCliente(Cliente c, PessoaJuridica pj, Logradouro l) {
        
        ControladorCliente.getInstCliente().excluiCliente(c, pj, l);
    }

    public PessoaJuridica consultaCliente(int cnpj) {

        return ControladorCliente.getInstCliente().consultaCliente(cnpj);
    }

    //Chamada para EntradaEntrega...
    public void cadastraEntradaEntrega(EntradaEntrega ee, Logradouro l, VolumeEntrega ve) {
        
        ControladorEntradaEntrega.getInstEntradaEntrega().cadastrarEntrega(ee, l, ve);
    }

    public void alteraEntradaEntrega(EntradaEntrega ee, VolumeEntrega ve, Logradouro l) {
        
        ControladorEntradaEntrega.getInstEntradaEntrega().alteraEntradaEntrega(ee, ve, l);
    }

    public void excluiEntradaEntrega(EntradaEntrega ee, VolumeEntrega ve, Logradouro l) {
        
        ControladorEntradaEntrega.getInstEntradaEntrega().excluiEntradaEntrega(ee, ve, l);
    }

    public EntradaEntrega consultaEntradaEntrega(int codigo) {

        return ControladorEntradaEntrega.getInstEntradaEntrega().consultaEntradaEntrega(codigo);
    }

    //Chamada para Fornecedor...
    public void cadastraFornecedor(Fornecedor f, PessoaJuridica pj, Logradouro logradouro, Cliente cl) {
        
        ControladorFornecedor.getInstFornecedor().cadastraFornecedor(f, pj, logradouro, cl);
    }

    public void alteraFornecedor(Fornecedor f, PessoaJuridica pj, Logradouro l, Cliente cl) {
        
        ControladorFornecedor.getInstFornecedor().alteraFornecedor(f, pj, l, cl);
    }

    public void excluiFornecedor(Fornecedor f, PessoaJuridica pj, Logradouro l, Cliente cl) {
        
        ControladorFornecedor.getInstFornecedor().excluiFornecedor(f, pj, l, cl);
    }

    public Fornecedor consultaFornecedor(int codigo) {

        return ControladorFornecedor.getInstFornecedor().consultaFornecedor(codigo);
    }
    
    /*
    //Fornecimento ...
    public void cadastraFornecimento(Fornecimento f) {
        
        ControladorFornecimento.getInstance().cadastraFornecimento(f);
    }

    public Fornecimento consultaFornecimento(Fornecimento f) {

        return ControladorFornecimento.getInstance().consultaFornecimento(f);
    }
    */

    //Chamada para Funcionario...
    public Funcionario consultaFuncionario(int matricula) {

        return ControladorFuncionario.getInstFuncionario().consultaFuncionario(matricula);
    }
    
    public Funcionario getFuncionario() {
        
        return ControladorSessao.getInstSessao().getFuncionario();
    }
    
    public void cadastraFuncionario(Funcionario f, PessoaFisica pf, Logradouro l) {

        ControladorFuncionario.getInstFuncionario().cadastraFuncionario(f, pf, l);
    }

    public void alteraFuncionario(Funcionario f) {

        ControladorFuncionario.getInstFuncionario().alteraFuncionario(f);
    }

    public void excluiFuncionario(int matricula) {

        ControladorFuncionario.getInstFuncionario().excluiFuncionario(matricula);
    }

    public void salvaSessaoFuncionario(int matricula) {

         ControladorSessao.getInstSessao().salvaSessaoFuncionario(matricula);
    }

    //Chamada para Produto...
    public void cadastraProduto(Produto p) {
        
        ControladorProduto.getInstance().cadastraProduto(p);
    }

    public void alteraProduto(Produto p) {
        
        ControladorProduto.getInstance().alteraProduto(p);
    }

    public void excluiProduto(int codigo) {
        
        ControladorProduto.getInstance().excluiProduto(codigo);
    }

    public Produto consultaProduto(int codigo) {

        return ControladorProduto.getInstance().consultaProduto(codigo);
    }

    //Chamada para Rastreamanto...
    public void atualizaRastreamanto(SaidaEntrega ss, EntradaEntrega ee) {
        
        ControladorRastreamento.getInstRastreador().atualizarRastreamento(ss,ee);
    }

    public SaidaEntrega consultaRastreamanto(int codigoRastreioEntrega) {

        return ControladorRastreamento.getInstRastreador().consultaRastreamento(codigoRastreioEntrega);        
    }

    //Chamada para SaidaEntrega...
    public void cadastraSaidaEntrega(EntradaEntrega ee, SaidaEntrega ss) {
    }

    public void alteraSaidaEntrega(EntradaEntrega ee, SaidaEntrega ss) {
    }

    public void excluiSaidaEntrega(EntradaEntrega ee, SaidaEntrega ss) {
    }

    public SaidaEntrega consultaSaidaEntrega(int codigo) {

        return null;
    }

    //Chamada para Validacao...
    public boolean validaLogin(int matricula, String senha) {

        return ControladorValidacao.getInstValidacao().validaLogin(matricula, senha);
    }
    
    public Bairro validaBairro(String nomeBairro) {

        return ControladorValidacao.getInstValidacao().validaBairro(nomeBairro);
    }

    public Cidade validaCidade(String nomeCidade) {

        return ControladorValidacao.getInstValidacao().validaCidade(nomeCidade);
    }

    public Estado validaEstado(String nomeEstado) {

        return ControladorValidacao.getInstValidacao().validaEstado(nomeEstado); 
    }

    public GrupoAcesso validaGrupoAcesso(String nomeGrupoAcesso) {

        return ControladorValidacao.getInstValidacao().validaGrupoAcesso(nomeGrupoAcesso);
    }
}
